Tugas Analisis Multimedia: Audio, Gambar, Video¶

Mata Kuliah: Sistem & Teknologi Multimedia
Nama: Harisya Miranti NIM: 122140049


Deskripsi Tugas¶

Tugas ini bertujuan untuk memahami representasi dasar data multimedia (audio, gambar, dan video) melalui praktik langsung memuat data, visualisasi, dan ekstraksi informasi fundamental. Anda akan bekerja dengan tiga jenis media berbeda untuk menganalisis karakteristik temporal (audio), spasial (gambar), dan spatio-temporal (video).

Fokus tugas adalah pada pemahaman konsep dasar representasi multimedia dan kemampuan interpretasi hasil visualisasi, bukan pada manipulasi atau transformasi lanjutan data multimedia.


⚠️ CATATAN PENTING: PRESENTASI ACAK & KEJUJURAN AKADEMIK¶

Sebagian mahasiswa akan dipilih secara ACAK untuk presentasi singkat (5-10 menit) menjelaskan kode dan interpretasi hasil mereka. Jika Anda:

  • Tidak mampu menjelaskan kode yang Anda kumpulkan
  • Hanya menyalin-tempel tanpa pemahaman
  • Bergantung sepenuhnya pada AI tanpa memahami konsep

Maka nilai tugas Anda akan diberikan 0 (nol).

Gunakan referensi dan AI sebagai alat bantu pembelajaran, tetapi pastikan Anda memahami setiap baris kode dan dapat menjelaskan logika di baliknya.

In [ ]:
    import matplotlib
    print(matplotlib.__version__)
3.10.5
In [ ]:
# Import Library (Satu-satunya sel kode dalam template ini)
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import librosa
import soundfile as sf
from PIL import Image
import cv2
from IPython.display import Audio, HTML, display
import os

# Set matplotlib untuk menampilkan plot inline
%matplotlib inline

# Tampilkan versi library untuk dokumentasi
print("Library versions:")
print(f"NumPy: {np.__version__}")
print(f"Librosa: {librosa.__version__}")
print(f"OpenCV: {cv2.__version__}")
print(f"Matplotlib: {matplotlib.__version__}")

# Tambahkan import lain jika diperlukan saat mengerjakan tugas
Library versions:
NumPy: 2.2.6
Librosa: 0.11.0
OpenCV: 4.12.0
Matplotlib: 3.10.5

Petunjuk Umum Pengerjaan¶

📋 Cara Menggunakan Template¶

  • Gunakan notebook ini sebagai kerangka kerja utama
  • Tulis penjelasan (markdown) SEBELUM menaruh kode agar maksud dan tujuan jelas
  • Tambahkan sel kode di tempat yang sudah disediakan (tandai dengan TODO)
  • Semua plot/gambar harus diberi judul, label sumbu, dan keterangan singkat

📊 Standar Visualisasi¶

  • Setiap plot harus memiliki judul yang deskriptif
  • Label sumbu X dan Y harus jelas
  • Gunakan colorbar untuk plot yang memerlukan skala warna
  • Berikan interpretasi singkat setelah setiap visualisasi

📂 Struktur Data yang Direkomendasikan¶

  • Buat folder data/ di direktori yang sama dengan notebook
  • Gunakan nama file yang deskriptif (contoh: audio_musik_piano.wav, gambar_pemandangan_gunung.jpg)
  • Dokumentasikan sumber data jika menggunakan dataset publik

⚠️ Larangan¶

  • Jangan menaruh seluruh pekerjaan dalam satu sel kode yang sangat panjang
  • Jangan menempel hasil output tanpa interpretasi atau analisis
  • Jangan bergantung sepenuhnya pada AI - pahami dan kuasai kode Anda

🎯 Persiapan Presentasi Acak¶

  • Pastikan Anda memahami setiap baris kode yang ditulis
  • Latih menjelaskan logika dan alur pemikiran Anda
  • Siapkan penjelasan untuk setiap visualisasi dan interpretasinya

Checklist Kelengkapan (Centang ✅ saat selesai)¶

🎵 Bagian Audio¶

  • [✅] Muat audio dan tampilkan metadata (durasi, sample rate, jumlah kanal)
  • [✅] Tampilkan waveform dengan label sumbu yang jelas
  • [✅] Tampilkan spectrogram dalam skala log-dB dengan colorbar
  • [✅] Tampilkan MFCC (minimal 13 koefisien) sebagai heatmap
  • [✅] Berikan interpretasi dan analisis untuk setiap visualisasi audio

🖼️ Bagian Gambar¶

  • [✅] Tampilkan gambar dengan benar dalam format RGB
  • [✅] Tampilkan informasi dasar (dimensi, jumlah kanal, dtype)
  • [✅] Tampilkan histogram warna untuk channel R, G, B
  • [✅] Berikan analisis hubungan histogram dengan kesan visual gambar

📹 Bagian Video¶

  • [✅] Tampilkan metadata video (resolusi, fps, frame count, durasi)
  • [✅] Tampilkan 3 frame representatif (awal, tengah, akhir)
  • [✅] Konversi BGR ke RGB dengan benar untuk visualisasi
  • [✅] Analisis kesesuaian parameter video dengan use case

📝 Analisis & Dokumentasi¶

  • [✅] Setiap bagian memiliki interpretasi dan analisis ringkas
  • [✅] Perbandingan representasi ketiga jenis media
  • [✅] Kesimpulan pembelajaran dan refleksi
  • [✅] Semua sumber data dan referensi dicantumkan

Pendahuluan¶

Apa itu Data Multimedia?¶

Data multimedia adalah informasi yang dikodekan dalam berbagai format untuk merepresentasikan dunia nyata:

  • Audio (1D): Sinyal satu dimensi yang berubah terhadap waktu

    • Contoh: musik, suara, speech
    • Representasi: amplitudo vs waktu
  • Gambar (2D): Matriks nilai intensitas dalam ruang dua dimensi

    • Contoh: foto, ilustrasi, grafik
    • Representasi: intensitas pixel pada koordinat (x,y)
  • Video (2D + Waktu): Rangkaian frame (gambar) yang ditampilkan berurutan

    • Contoh: film, rekaman, animasi
    • Representasi: frame berubah terhadap waktu dengan frame rate tertentu

Tujuan Tugas¶

Memahami representasi dasar dan teknik visualisasi fundamental untuk setiap jenis media multimedia, termasuk:

  • Cara memuat dan membaca file multimedia
  • Ekstraksi informasi metadata yang penting
  • Visualisasi yang informatif dan mudah dipahami
  • Interpretasi hasil analisis secara kontekstual

Cara Kerja¶

  1. Isi setiap bagian sesuai instruksi yang diberikan
  2. Tambahkan sel kode di tempat yang ditandai dengan "TODO"
  3. Berikan interpretasi dan analisis setelah setiap visualisasi
  4. Pastikan semua plot memiliki judul, label, dan keterangan yang jelas

Bagian A — Audio¶

A1. Deskripsi Data¶

TODO: Jelaskan audio yang akan Anda analisis:

  • Jenis audio: music
  • Sumber: youtube (https://youtu.be/REaH5dWNINM?si=Nzde7WzD-VxYY4Rt)
  • Format file: WAV
  • Alasan pemilihan: Sepertinya menarik untuk diidentifikasi karena memiliki nada/suara yang beragam

Path file: data\audio_epic_trailer_music.wav (isi nama file Anda nanti di kode)

A2. TODO: Muat & Metadata¶

Instruksi: Tulis kode untuk memuat file audio dan menampilkan metadata dasar:

  • Sample rate (Hz)
  • Durasi (detik)
  • Jumlah kanal (mono/stereo)
  • Jumlah total sampel
In [ ]:
# Path audio
filename = r"data/audio_epic_trailer_music.wav"

# Baca audio
data, samplerate = sf.read(filename)

# Metadata
durasi = len(data) / samplerate
kanal = 1 if len(data.shape) == 1 else data.shape[1]
total_sampel = len(data)

from IPython.display import Audio

print(f"Sample Rate   : {samplerate} Hz")
print(f"Durasi        : {durasi:.2f} detik")
print(f"Jumlah Kanal  : {kanal} ({'Mono' if kanal==1 else 'Stereo'})")
print(f"Total Sampel  : {total_sampel}")
Audio(filename)
Sample Rate   : 44100 Hz
Durasi        : 27.56 detik
Jumlah Kanal  : 2 (Stereo)
Total Sampel  : 1215488
Out[ ]:
Your browser does not support the audio element.

A3. TODO: Waveform¶

Instruksi: Plot waveform audio dengan:

  • Sumbu X: waktu (detik)
  • Sumbu Y: amplitudo
  • Judul dan label sumbu yang jelas

Analisis yang diperlukan:

Waveform menunjukkan pola berulang pada beberapa rentang waktu yang membentuk beberapa blok (sekitar 5 bagian yang terlihat). Blok - blok pada beberapa rentang waktu yang terlihat ini menunjukkan amplitudo yang besar/tebal, hal ini berarti bahwa pada durasi tersebut mengeluarkan suara yang keras. Sedangkan pada beberapa rentang waktu lainnya, terlihat bahwa amplitudo menampilkan grafik yang kecil/pendek, hal ini berarti bahwa suara yang dikeluarkan lembut/kecil (kurang lebih pada rentang waktu 2-5, 8-12, 15-16, 18-19).

Pada waveform yang ditampilkan, terlihat bahwa amplitudo dari channel kiri (biru) dengan channel kanan (merah) memiliki perbedaan namun tidak terlalu signifikan.

Channel kanan menunjukkan amplitudo yang sedikit lebih tebal dari pada channel kiri dibagian tertentu, hal ini menunjukkan bahwa audio bersifat stereo (memiliki 2 matriks array dengan data yang berbeda) sehingga instrumen yang ditampiklan pada kedua channel berbeda.

In [ ]:
# Path audio
filename = r"data\audio_epic_trailer_music.wav"

# Load audio
data, samplerate = sf.read(filename)

time = np.linspace(0, len(data) / samplerate, num=len(data))
fig, axs = plt.subplots(2, 1, figsize=(12, 6), sharex=True)

axs[0].plot(time, data[:, 0], color="blue")
axs[0].set_title("Waveform Audio - Left Channel")
axs[0].set_ylabel("Amplitudo")
axs[0].grid(True, linestyle="--", alpha=0.6)

axs[1].plot(time, data[:, 1], color="red")
axs[1].set_title("Waveform Audio - Right Channel")
axs[1].set_xlabel("Waktu (detik)")
axs[1].set_ylabel("Amplitudo")
axs[1].grid(True, linestyle="--", alpha=0.6)

plt.tight_layout()
plt.show()
No description has been provided for this image

A4. TODO: Spectrogram log-dB¶

Instruksi: Hitung STFT dan tampilkan spectrogram dalam skala log-dB:

  • Gunakan parameter standar (n_fft=1024, hop_length=256)
  • Tampilkan dengan colorbar
  • Label sumbu: waktu (detik) dan frekuensi (Hz)

Analisis yang diperlukan: Jelaskan perbedaan informasi yang didapat dari spectrogram dibanding waveform.

Analisis

Spectogram diatas menunjukkan bahwa energi dominan ditunjukkan pada frekuensi 0-5000 Hz. selain itu ada pola yang membentuk beberapa blok pada rentang waktu tertentu seperti pada detik 0-2, 6-7, 13-14, 15-21, hal ini berarti bahwa frekuensi tinggi pada rentang waktu tersebut mengeluarkan nada yang tinggi (15.000 Hz). Pola frekuensi yang dinamis menunjukkan bahwa audio yang dilampirkan memiliki nada yang bervasiasi (dari tinggi-rendah-dst).

In [ ]:
# Path audio
filename = r"data\audio_epic_trailer_music.wav"

# Load audio 
y, sr = librosa.load(filename, sr=None, mono=True)

# Hitung STFT
n_fft = 1024
hop_length = 256
D = librosa.stft(y, n_fft=n_fft, hop_length=hop_length)

# Konversi magnitude ke skala log-dB
S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)

# Plot spectrogram
plt.figure(figsize=(12, 6))
librosa.display.specshow(S_db, sr=sr, hop_length=hop_length,
                         x_axis="time", y_axis="hz", cmap="magma")
plt.colorbar(format="%+2.f dB")
plt.title("Spectrogram (Log-dB)")
plt.xlabel("Waktu (detik)")
plt.ylabel("Frekuensi (Hz)")
plt.tight_layout()
plt.show()
No description has been provided for this image

A5. TODO: MFCC¶

Instruksi: Hitung dan tampilkan minimal 13 koefisien MFCC sebagai heatmap:

  • Sumbu X: waktu (frame)
  • Sumbu Y: koefisien MFCC (1-13)
  • Gunakan colorbar dan judul yang jelas

Analisis yang diperlukan: Interpretasi sederhana: apakah pola MFCC stabil atau berubah-ubah? Apa potensi maknanya?

Analisis

Terlihat bahwa MFCC pada koefisien 1 memiliki warna yang sangat kontras, yang berarti bahwa pada bagian tersebut memiliki energi yang dominan dari audio. Pada koefisien > 3 memilliki warna yang cenderung lebih stabil yang menandakan bahwa audio memiliki struktur yang konsisten.

In [ ]:
# Path audio
filename = r"data\audio_epic_trailer_music.wav"

# Load audio (mono, sr asli)
y, sr = librosa.load(filename, sr=None, mono=True)

# Hitung MFCC (13 koefisien)
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13, n_fft=1024, hop_length=256)

# Plot heatmap MFCC
plt.figure(figsize=(12, 6))
librosa.display.specshow(mfcc, x_axis="time", sr=sr, hop_length=256, cmap="magma")

plt.colorbar(label="Nilai MFCC")
plt.title("MFCC")
plt.xlabel("Waktu (frame)")
plt.ylabel("Koefisien MFCC")
plt.yticks(range(13), [str(i) for i in range(1, 14)])

plt.tight_layout()
plt.show()
No description has been provided for this image

A6. Analisis Ringkas (Wajib)¶

Jawab pertanyaan berikut:

  1. Perbedaan insight: Apa perbedaan informasi yang didapat dari waveform versus spectrogram?

    Jawaban Anda: pada waveform menunjukkan perubahan amplitudo terhadap waktu, sehingga waveform berguna untuk menyajikan informasi terkait perubahan volume atau keras&lembutnya audio. Sedangkan pada spectrogram menunjukkan perubahan frekuensi terhadap waktu, dimana dalam spectogram kita dapat melihat informasi terkait tentang tinggi atau rendahnya frekuensi suara dari suatu audio.

  2. Pembelajaran dari MFCC: Apa yang Anda pelajari dari visualisasi MFCC audio ini?

    Jawaban Anda: MFCC dipakai untuk menganalisis suatu suara, 13 koefisien pada MFCC ini adalah angka yang merepresentasikan karakteristik dari setiap spektrum suara. Pada audio ini MFCC membantu dalam membedakan jenis suara, instrumen yang ada seperti bass, drum, piano, dll.

Bagian B — Gambar¶

B1. Deskripsi Data¶

TODO: Jelaskan gambar yang akan Anda analisis:

  • Jenis gambar: Pemandangan
  • Sumber: Pinterest (https://id.pinterest.com/pin/48273027242067628/)
  • Format file: JPEG
  • Alasan pemilihan: Gradasi warna langitnya bagus

Path file: data\image_sunset.jpeg


B2. TODO: Baca & Tampilkan (RGB)¶

Instruksi: Baca gambar dan tampilkan dengan benar dalam format RGB:

  • Pastikan konversi warna benar (ingat perbedaan BGR vs RGB di OpenCV)
  • Berikan judul yang deskriptif
  • Hilangkan axis untuk tampilan yang bersih

Analisis yang diperlukan: Jelaskan gambar secara ringkas (objek dominan, kondisi pencahayaan, komposisi warna).

Analisis

  • Objek Dominan : Langit sunset dengan awan tebal dijalan raya yang terdapat tiang listrik, kendaraan, dan pohon.
  • kondisi Pencahayaan : Pencahayaan dari matahari terbenam dengan area jalanan yang relatif gelap
  • Komposisi Warna : Biru, Oranye, ungu, hitam

In [ ]:
filename = r"data\image_sunset.jpeg"

# Cek file ada
if not os.path.exists(filename):
    raise FileNotFoundError(f"File tidak ditemukan: {filename}")

# Baca gambar dengan OpenCV (hasil default = BGR)
img_bgr = cv2.imread(filename, cv2.IMREAD_COLOR)
if img_bgr is None:
    raise IOError(f"Gagal membaca gambar (mungkin format tidak didukung): {filename}")

# Konversi BGR -> RGB untuk ditampilkan dengan matplotlib
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)

# Tampilkan
plt.figure(figsize=(10, 6))
plt.imshow(img_rgb)
plt.title("Gambar Pemandangan Sunset — (ditampilkan dalam format RGB)")
plt.axis("off")  # hilangkan axis untuk tampilan bersih
plt.tight_layout()
plt.show()
No description has been provided for this image

B3. TODO: Informasi Dasar¶

Instruksi: Tampilkan informasi metadata gambar:

  • Dimensi (Height × Width)
  • Jumlah kanal
  • Tipe data (dtype)
  • Mode warna (jika relevan)
  • Ukuran file dalam memori

Analisis yang diperlukan: Jelaskan mengapa informasi ini penting untuk tahap preprocessing atau analisis lanjutan.

Analisis

  • dimensi berfungsi untuk menentukan resolusi dari gambar sehingga akan berpengaruh pada detail dari gambarnya
  • Jumlah kanal berfungsi untuk mengetahui apakah gambar grayscale (1 kanal) atau RGB (3 kanal)
  • tipe data berfungsi untuk menentukan rentang nilai piksel dari gambar

In [ ]:
img = cv2.imread("data/image_sunset.jpeg", cv2.IMREAD_COLOR)

height, width, channels = img.shape
dtype = img.dtype
size_in_memory = img.nbytes  # ukuran dalam byte

print(f"Dimensi          : {height} x {width}")
print(f"Jumlah Kanal     : {channels}")
print(f"Tipe Data (dtype): {dtype}")
print(f"Mode Warna       : BGR (default OpenCV)")  # OpenCV default BGR
print(f"Ukuran Memori    : {size_in_memory / 1024:.2f} KB")
Dimensi          : 552 x 736
Jumlah Kanal     : 3
Tipe Data (dtype): uint8
Mode Warna       : BGR (default OpenCV)
Ukuran Memori    : 1190.25 KB

B4. TODO: Histogram Warna¶

Instruksi: Tampilkan histogram distribusi intensitas untuk channel R, G, B:

  • Range: 0-255
  • Plot terpisah atau overlay dengan warna sesuai channel
  • Label sumbu: intensitas pixel dan frekuensi
  • Legend yang jelas

Analisis yang diperlukan: Analisis: channel mana yang dominan? Bagaimana kontras gambar? Seperti apa sebaran intensitasnya?

Analisis

  1. Channel Dominan: Jika dilihat dari grafik histogram, terlihat bahwa channel biru merupakan channel yang dominan dengan intensitas piksel 0-50 dengan frekuensi tertinggi di angka hampir menyentuh 12000. Namun jika dilihat dari visual gambar secara langsung, terlihat bahwa gambar didominasi oleh channel merah yang ditandai dengan warna langit khas sunset dengan kombinasi warna oranye-merah terang, dan jika dilihat dari grafik histogram, channel merah terang dengan intensitas piksel 250 berada pada frekuensi sekitar 8000, kedua tertinggi setelah channel biru.

  2. Kontras gambar : histogram gambar ini mencakup area intensitas piksel rendah sampai tinggi, yang berarti gambar ini memiliki rentang kontras yang luas. Hal ini juga dapat terlihat langsung dari gambar, dimana terdapat area gelap atau siluet jalan raya, pepohonan, dan tiang listrik yang muncul pada puncak intensitas rendah, dan area terang pada langit dengan kombinasi warna merah-oranye khas sunset yang muncul pada intensitas tinggi.

  3. sebaran intensitas :

  • puncak tertinggi berada pada intensitas rendah dengan rentang 0-50 (objek gelap/siluet jalan raya)
  • puncak dengan intensitas sedang direntang 80-170
  • lonjakan tinggi pada intensitas 255 pada channel merah

In [ ]:
img = cv2.imread("data/image_sunset.jpeg", cv2.IMREAD_COLOR)

# Konversi BGR (OpenCV default) ke RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# Hitung histogram untuk tiap channel
colors = ('r', 'g', 'b')
labels = ('Red', 'Green', 'Blue')

plt.figure(figsize=(10, 5))
for i, color in enumerate(colors):
    hist = cv2.calcHist([img_rgb], [i], None, [256], [0, 256])
    plt.plot(hist, color=color, label=labels[i])
    plt.xlim([0, 256])

# Label dan legend
plt.title("Histogram Warna Gambar (RGB)")
plt.xlabel("Intensitas Piksel (0-255)")
plt.ylabel("Frekuensi")
plt.legend()
plt.show()
No description has been provided for this image

B5. Analisis Ringkas (Wajib)¶

Jawab pertanyaan berikut:

Relasi histogram dengan kesan visual: Apa hubungan antara pola histogram yang Anda lihat dengan kesan visual gambar (terang/gelap, warna dominan, kontras)?

Jawaban Anda: Histogram yang muncul memiliki frekuensi tertinggi di intensitas 0-50 (gelap) dan warna merah terang dengan intensitas 250. Hal ini sesuai dengan isi pada gambar dimana siluet jalanan dan pepohonan yang mendominasi warna gelap pada gambar, dan juga latar langit sunset yang tampak terang dengan warna oranye & merah terang yang mendominasi.

Bagian C — Video¶

C1. Deskripsi Data¶

TODO: Jelaskan video yang akan Anda analisis:

  • Jenis video: Pemandangan
  • Sumber: Youtube (https://youtu.be/278IRQ6HSi4?si=cud--e_hBDIvFqv6)
  • Durasi target: 27 detik
  • Alasan pemilihan: shot bagus memakai drone dengan pemandangan gunung dan pantai.

Path file: data\video_cinematic_beach.mp4


C2. TODO: Baca & Metadata¶

Instruksi: Baca video dengan OpenCV dan tampilkan metadata:

  • Resolusi (Width × Height)
  • Frame rate (fps)
  • Jumlah total frame
  • Durasi (detik)
  • Klasifikasi resolusi (HD, Full HD, 4K, dll.)

Analisis yang diperlukan: Jelaskan pentingnya parameter-parameter tersebut untuk analisis video atau aplikasi tertentu.

Analisis : Parameter seperti resolusi penting untuk mengetahui detail visual dari video yang ada, selain itu frame rate atau fps berguna dalam kelancaran gerakan dalam suatu video. Jumlah frame & durasi penting untuk mengetahui kapasitas yang dibutuhkan untuk suatu video, sedangkan resolusi berguna untuk menentukan kualitas suatu video.


In [ ]:
# Path video
video_path = r"data\video_cinematic_beach.mp4"

# Baca video dengan OpenCV
cap = cv2.VideoCapture(video_path)

if not cap.isOpened():
    print("Gagal membuka file video")
else:
    # Ambil metadata
    width  = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps    = cap.get(cv2.CAP_PROP_FPS)
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    duration = total_frames / fps if fps > 0 else 0

    # Klasifikasi resolusi
    if width >= 3840 and height >= 2160:
        resolution_class = "4K (Ultra HD)"
    elif width >= 1920 and height >= 1080:
        resolution_class = "Full HD (1080p)"
    elif width >= 1280 and height >= 720:
        resolution_class = "HD (720p)"
    elif width >= 640 and height >= 480:
        resolution_class = "SD (480p)"
    else:
        resolution_class = "Low Resolution"

    # Tampilkan hasil
    print(f"Resolusi       : {width} x {height}")
    print(f"Frame Rate     : {fps:.2f} fps")
    print(f"Total Frame    : {total_frames}")
    print(f"Durasi         : {duration:.2f} detik")
    print(f"Klasifikasi    : {resolution_class}")

cap.release()
Resolusi       : 1280 x 720
Frame Rate     : 29.97 fps
Total Frame    : 821
Durasi         : 27.39 detik
Klasifikasi    : HD (720p)

C3. TODO: Tampilkan 3 Frame (Awal–Tengah–Akhir)¶

Instruksi: Ambil dan tampilkan 3 frame representatif:

  • Frame pertama (index 0)
  • Frame tengah (index ~total_frame/2)
  • Frame terakhir (index total_frame-1)
  • Konversi BGR→RGB sebelum ditampilkan
  • Subplot dengan judul frame dan timestamp

Analisis yang diperlukan: Deskripsikan perbedaan visual antar frame dan apa yang dapat dipelajari dari sampel frame ini.

Analisis

  • Frame Awal : Pada frame awal terlihat didominasi oleh hutan/gunung/pepohonan hijau dengan kombinasi langit biru.
  • Frame tengah : pada frame tengah terlihat ombak pantai, hamparan pasir pantai yang merefleksikan pantulan langit dari air yang ada diatas permukaan pasir, dan juga ada awan tipis di langit biru, dan pepohonan hijau di bukit yang masih terlihat pada frame tengah.
  • Frame akhir : merupakan credit dari pemilik video yang bertuliskan "NOAH /// MALIN" dengan warna teks putih diatas latar hitam.

In [ ]:
import cv2
import matplotlib.pyplot as plt

# Path video
video_path = r"data/video_cinematic_beach.mp4"

# Baca video
cap = cv2.VideoCapture(video_path)

if not cap.isOpened():
    print("Gagal membuka file video")
else:
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    fps = cap.get(cv2.CAP_PROP_FPS)

    frame_indices = [0, total_frames // 2]

    last_idx = total_frames - 1
    cap.set(cv2.CAP_PROP_POS_FRAMES, last_idx)
    ret, _ = cap.read()
    while not ret and last_idx > 0:
        last_idx -= 1
        cap.set(cv2.CAP_PROP_POS_FRAMES, last_idx)
        ret, _ = cap.read()
    frame_indices.append(last_idx)

    frames = []
    timestamps = []

    # Ambil frame sesuai index
    for idx in frame_indices:
        cap.set(cv2.CAP_PROP_POS_FRAMES, idx)
        ret, frame = cap.read()
        if ret:
            frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            frames.append(frame_rgb)
            timestamps.append(idx / fps)
        else:
            frames.append(None)
            timestamps.append(None)

    cap.release()

    # Plot hasil
    plt.figure(figsize=(15, 5))
    titles = ["Frame Awal", "Frame Tengah", "Frame Akhir"]

    for i, (frame, t) in enumerate(zip(frames, timestamps)):
        plt.subplot(1, 3, i+1)
        if frame is not None:
            plt.imshow(frame)
            plt.title(f"{titles[i]}\nTime: {t:.2f} detik")
        else:
            plt.text(0.5, 0.5, "Frame tidak terbaca", ha="center", va="center")
        plt.axis("off")

    plt.suptitle("3 Frame Representatif (Awal–Tengah–Akhir)", fontsize=14)
    plt.show()
No description has been provided for this image

C4. Analisis Ringkas (Wajib)¶

Jawab pertanyaan berikut:

Kesesuaian parameter: Apakah fps dan resolusi video ini sesuai untuk use case pilihan Anda (misalnya: media sosial, kuliah daring, presentasi, dll.)? Jelaskan alasan singkat.

Jawaban Anda: fram rate 29.97 fps dengan resolusi video 1280x720 (HD) ini cukup sesuai untuk use case seperti media sosial, karena resolusi 720 (HD) sudah sangat cukup untuk menampilkan kualitas visual yang jelas dengan ukuran file yang tidak terlalu besar. frame rate pada video ini juga sudah menampilkan gerakan yang smooth sehingga ini merupakan kombinasi yang baik antara kualitas video yang dihasilkan dengan kapasitas penyimpanan data untuk media sosial.

Perbandingan & Kesimpulan¶

Perbandingan Representasi Media¶

TODO: Bandingkan secara ringkas representasi dan visualisasi ketiga media:

Audio (1D - Temporal)¶

  • Representasi: audio dengan 2 kanal (stereo).
  • Visualisasi utama: audio format WAV, waveform, spectrogram, MFCC
  • Informasi yang diperoleh: korelasi antara amplitudo yang mempengaruhi keras lembut suatu suara yang divisualisasikan melalui waveform, mengetahui korelasi frekuensi suatu suara yang mempengaruhi tinggi rendahnya nada yang divisualisasikan melalui spectrogram, dan menganalisis atau mengklasifikasikan suara melalui MFCC.

Gambar (2D - Spasial)¶

  • Representasi: data matriks 2D dengan kanal warna RGB
  • Visualisasi utama: tampilan gambar asli, histogram.
  • Informasi yang diperoleh: informasi detail terkait gambar seperti dimensi, jumlah kanal, dan ukuran file gambar. Informasi terkait korelasi frekuensi dengan intensitas piksel warna pada gambar yang divisualisasikan di histogram, mengetahui distribusi cahaya dan kontras warna.

Video (2D + Waktu - Spatio-temporal)¶

  • Representasi: _________________
  • Visualisasi utama: potongan frame (awal, tengah, akhir). metadata (fps, resolusi).
  • Informasi yang diperoleh: informasi metadata seperti frame rate, resolusi video, total frame, durasi dari video. Menngetahui hubungan antara fps dengan kualitas transisi objek, mengetahui korelasi resolusi gambar dengan kualitas tayangan video.

Refleksi Pembelajaran¶

3 Poin yang Saya Pelajari:¶

  1. perbedaan representasi suatu media audio, gambar, dan video
  2. Teknik visualisasi seperti waveform, spectrogram, dan MFCC untuk audio, histogram untuk pendistribusian warna/channel pada gambar, serta ekstraksi potongan frame pada video.
  3. pentingnya informasi metadata (jumlah kanal, resolusi, durasi, dimensi, fps, dll) untuk menganalisis kualitas dan kegunaan suatu media.

2 Hal yang Masih Membingungkan/Ingin Diperdalam:¶

  1. Terkait MFCC, mulai dari kegunaan spesifik dalam audio, serta cara pembacaan atau analisis grafik MFCC
  2. Menentukan channel dominan dari suatu histogram, apakah dilihat dari frekuensi tertinggi, atau distribusi intensitas pikselnya.

Sumber Data & Referensi¶

TODO: Cantumkan semua sumber data dan referensi yang digunakan:

  • Audio: https://youtu.be/REaH5dWNINM?si=Nzde7WzD-VxYY4Rt
  • Gambar: https://id.pinterest.com/pin/48273027242067628/
  • Video: https://youtu.be/278IRQ6HSi4?si=cud--e_hBDIvFqv6
  • Referensi teknis: https://chatgpt.com/share/68c7c88f-5e5c-8013-9943-be7747d3a268

Rubrik Penilaian¶

Distribusi Bobot Penilaian¶

Aspek Penilaian Bobot Deskripsi
Kelengkapan 35% Semua langkah inti dikerjakan sesuai checklist
Kualitas Visualisasi 20% Judul, label sumbu, colorbar, legend, keterbacaan plot
Analisis & Interpretasi 30% Kemampuan interpretasi hasil, bukan sekadar output mentah
Kerapihan & Struktur 10% Markdown jelas, kode modular, dokumentasi baik
Orisinalitas & Penguasaan 5% Pemahaman saat presentasi acak

Detail Kriteria Penilaian¶

🏆 Kelengkapan (35%)¶

  • ✅ Semua 4 visualisasi audio (metadata, waveform, spectrogram, MFCC)
  • ✅ Semua 3 visualisasi gambar (display RGB, metadata, histogram)
  • ✅ Semua 2 visualisasi video (metadata, frame extraction)
  • ✅ Analisis ringkas untuk setiap bagian

📊 Kualitas Visualisasi (20%)¶

  • Plot memiliki judul yang informatif dan deskriptif
  • Label sumbu X dan Y jelas dan sesuai
  • Colorbar/legend tersedia jika diperlukan
  • Ukuran plot proporsional dan mudah dibaca

🧠 Analisis & Interpretasi (30%)¶

  • Interpretasi menunjukkan pemahaman konsep
  • Analisis kontekstual, bukan sekadar deskripsi output
  • Mampu menghubungkan hasil dengan teori
  • Refleksi pembelajaran yang thoughtful

📝 Kerapihan & Struktur (10%)¶

  • Markdown terstruktur dengan heading yang konsisten
  • Kode bersih, terkompartemen, dan mudah dibaca
  • Dokumentasi yang memadai
  • Flow logical dari satu bagian ke bagian lain

🎯 Orisinalitas & Penguasaan (5%)¶

  • PENTING: Jika saat presentasi acak Anda tidak mampu menjelaskan kode yang Anda tulis atau menunjukkan ketergantungan buta pada AI/copy-paste, nilai tugas akan dianggap 0.
  • Kemampuan menjelaskan logika dan alur pemikiran
  • Pemahaman konsep di balik implementasi kode

Proporsi Penilaian Total¶

  • Proporsi penilaian hanya 80%, 20% lagi akan didasarkan pada kecepatan pengumpulan tugas
  • Sehingga: 0.8 * penilaian dosen + nilai waktu pengumpulan

Aturan Kejujuran Akademik¶

📖 Penggunaan Referensi & AI yang Diperbolehkan¶

Anda BOLEH menggunakan:

  • ✅ Dokumentasi resmi library (NumPy, Matplotlib, Librosa, OpenCV)
  • ✅ Tutorial dan contoh kode dari sumber terpercaya
  • ✅ AI tools (ChatGPT, GitHub Copilot, dll.) sebagai alat bantu pembelajaran
  • ✅ Diskusi dengan teman untuk pemahaman konsep

⚠️ Syarat & Batasan WAJIB¶

Namun Anda HARUS:

  • 🧠 Memahami setiap baris kode yang Anda masukkan ke notebook
  • 📝 Menulis interpretasi dengan kata-kata sendiri, bukan hasil copy-paste
  • 📚 Mencantumkan sumber data dan referensi yang digunakan, termasuk transkrip percakapan dengan AI dalam link atau teks
  • 🎯 Mampu menjelaskan logika dan alur pemikiran saat presentasi acak

❌ Pelanggaran yang Berakibat Nilai 0¶

  • Plagiarisme atau penyalinan buta dari sumber manapun
  • Copy-paste kode tanpa pemahaman dan tidak dapat menjelaskan
  • Menggunakan AI untuk mengerjakan seluruh tugas tanpa pembelajaran personal
  • Tidak dapat menjawab pertanyaan dasar tentang kode yang dikumpulkan
  • Menyalin pekerjaan teman atau bekerjasama dalam pengerjaan individual

🎯 Persiapan Presentasi Acak¶

Kemungkinan pertanyaan yang akan ditanyakan:

  • "Jelaskan mengapa Anda menggunakan parameter ini di STFT?"
  • "Apa arti dari pola yang terlihat di MFCC?"
  • "Mengapa perlu konversi BGR ke RGB?"
  • "Interpretasikan hasil histogram yang Anda buat"
  • "Bagaimana cara kerja spectrogram?"

Tips sukses:

  • Pahami konsep dasar setiap teknik yang digunakan
  • Latih menjelaskan dengan bahasa sederhana
  • Siapkan justifikasi untuk setiap pilihan parameter
  • Kuasai interpretasi setiap visualisasi yang dibuat

Panduan Pengumpulan¶

📁 Berkas yang Harus Dikumpulkan¶

Wajib:¶

  1. Notebook Jupyter (.ipynb) dengan nama: NIM_Nama_TugasMultimedia.ipynb
    • Contoh: 123456789_JohnDoe_TugasMultimedia.ipynb
  2. PDF hasil render dari notebook

📅 Informasi Pengumpulan¶


✅ Checklist Sebelum Submit¶

  • [✅] Semua cell sudah dijalankan dan menampilkan output
  • [✅] Nama file sesuai format: NIM_Worksheet2.ipynb dan NIM_Worksheet2.pdf
  • [✅] Semua TODO sudah diisi dengan lengkap
  • [✅] Analisis dan interpretasi sudah ditulis untuk setiap bagian
  • [✅] Sumber data dan referensi sudah dicantumkan

Export ke PDF:¶

  • File → Save and Export Notebook As → HTML
  • Buka HTML di browser -> Save as PDF